home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / osr5 / devtools / dejagnu-971222 / usr / local / share / dejagnu / tip.exp < prev    next >
Encoding:
Text File  |  1998-03-22  |  4.3 KB  |  185 lines

  1. #   Copyright (C) 1997 Free Software Foundation, Inc.
  2.  
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; either version 2 of the License, or
  6. # (at your option) any later version.
  7. # This program is distributed in the hope that it will be useful,
  8. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10. # GNU General Public License for more details.
  11. # You should have received a copy of the GNU General Public License
  12. # along with this program; if not, write to the Free Software
  13. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
  14.  
  15. # Please email any bugs, comments, and/or additions to this file to:
  16. # DejaGnu@cygnus.com
  17.  
  18. #
  19. # Connect via tip as part of remote_open.
  20. # returns -1 if it failed, the spawn_id if it worked; also sets
  21. # [board_info ${hostname} fileid] with the spawn_id on success.
  22. #
  23. proc tip_open { hostname } {
  24.     global verbose
  25.     global spawn_id
  26.  
  27.     set tries 0
  28.     set result -1
  29.  
  30.     if [board_info $hostname exists name] {
  31.     set hostname [board_info ${hostname} name];
  32.     }
  33.     set port [board_info ${hostname} tipname]
  34.     if [board_info ${hostname} exists shell_prompt] {
  35.     set shell_prompt [board_info ${hostname} shell_prompt]
  36.     } else {
  37.     set shell_prompt ".*> " # Pick something reasonably generic.
  38.     }
  39.  
  40.     if [board_info ${hostname} exists fileid] {
  41.     unset board_info(${hostname},fileid);
  42.     }
  43.     spawn tip -v $port
  44.     if { $spawn_id < 0 } {
  45.     perror "invalid spawn id from tip"
  46.     return -1
  47.     }
  48.     expect {
  49.     -re ".*connected.*$" { 
  50.         send "\r\n"
  51.         expect {
  52.         -re ".*$shell_prompt.*$" {
  53.             verbose "Got prompt\n"
  54.             set result 0
  55.             incr tries
  56.         }
  57.         timeout {
  58.             warning "Never got prompt."
  59.             set result -1
  60.             incr tries
  61.             if $tries<=2 {
  62.             exp_continue
  63.             }
  64.         }
  65.         }
  66.     }
  67.     -re "all ports busy.*$" {
  68.         set result -1
  69.         perror "All ports busy."
  70.         incr tries
  71.         if { $tries <= 2 } {
  72.         exp_continue
  73.         }        
  74.     }
  75.     -re "Connection Closed.*$" {
  76.         perror "Never connected."
  77.         set result -1
  78.         incr tries
  79.         if { $tries <= 2 } {
  80.         exp_continue
  81.         }
  82.     }
  83.     -re ".*: Permission denied.*link down.*$" {
  84.         perror "Link down."
  85.         set result -1
  86.         incr tries
  87.     }
  88.     timeout    {
  89.         perror "Timed out trying to connect."
  90.         set result -1
  91.         incr tries
  92.         if { $tries <= 2 } {
  93.         exp_continue
  94.         }
  95.     }
  96.     eof {
  97.         perror "Got unexpected EOF from tip."
  98.         set result -1
  99.         incr tries
  100.     }
  101.     }
  102.  
  103.     send "\n~s"
  104.     expect {
  105.     "~\[set\]*" {
  106.         verbose "Setting verbose mode" 1
  107.         send "verbose\n\n\n"
  108.     }    
  109.     }
  110.  
  111.     if { $result < 0 } {
  112.     perror "Couldn't connect after $tries tries."
  113.     return -1
  114.     } else {
  115.     set board_info($hostname,fileid) $spawn_id
  116.     return $spawn_id
  117.     }
  118. }
  119.  
  120. #
  121. # Downloads using the ~put command under tip
  122. #     arg - is a full path name to the file to download
  123. #     returns -1 if an error occured, otherwise it returns 0.
  124. #
  125. proc tip_download { dest file args } {
  126.     global verbose
  127.     global decimal
  128.     global expect_out
  129.  
  130.     if [board_info $dest exists shell_prompt] {
  131.     set shell_prompt [board_info $dest shell_prompt];
  132.     } else {
  133.     set shell_prompt ".*>"
  134.     }
  135.  
  136.     set result ""
  137.     if ![board_info $dest exists fileid] {
  138.     perror "tip_download: no connection to $dest."
  139.     return $result;
  140.     }
  141.     set shell_id [board_info $dest fileid];
  142.  
  143.     if ![file exists $file] {
  144.     perror "$file doesn't exist."
  145.     return $result
  146.     }
  147.  
  148.     send -i $shell_id "\n~p"
  149.     expect {
  150.     -i $shell_id "~\[put\]*" {
  151.         verbose "Downloading $file, please wait" 1
  152.         send -i $shell_id "$file\n"
  153.         set timeout 50
  154.         expect {
  155.         -i $shell_id -re ".*$file.*$" {
  156.             exp_continue
  157.         }
  158.         -i $shell_id -re ".*lines transferred in.*minute.*seconds.*$shell_prompt.*$" {
  159.             verbose "Download $file successfully" 1
  160.             set result $file;
  161.         }
  162.         -i $shell_id -re ".*Invalid command.*$shell_prompt$" {
  163.             warning "Got an invalid command to the remote shell."
  164.         }
  165.         -i $shell_id -re ".*$decimal\r" {
  166.             if [info exists expect_out(buffer)] {
  167.             verbose "$expect_out(buffer)"
  168.             exp_continue
  169.             }
  170.         }
  171.         -i $shell_id timeout {
  172.             perror "Timed out trying to download."
  173.         }
  174.         }
  175.     }    
  176.     timeout {
  177.         perror "Timed out waiting for response to put command."
  178.     }
  179.     }    
  180.     set timeout 10
  181.     return $result
  182. }
  183.